Write The Comments First
「コメントを最初に書く」
コメントを設計プロセスに組み込む
開発者の多くは、コーディング終了後にコメントを書こうとする
後から書こうとすると、コメントを書く量が増大し面倒になる
結果として、文書化されていないコードが増える
また、設計してから時間が経つと、設計当時の記憶が曖昧になる
コードを見ながらコメントを書くので、コメントはコードと同じこと書きがちに
Comments Should Describe Things that Ain't Obvious from the Code に反するradish-miyazaki.icon
結果として、コメントに重要な情報が欠けた状態になる
コメントは最初に書く(Write The Comments First)
e.g. 新しいクラスを実装する
1. クラスのインタフェースのコメントを書く
2. 重要な public メソッドのインタフェースのコメントとシグネチャを書く
実装はまだ記述しない
3. 重要なインタンス変数の宣言とコメントを書く
4. メソッドを実装し、必要に応じてコメントを加える
メソッドやインスタンス変数が追加で必要になるケースもある
メソッド: 同様に、実装の前にインタフェースのコメントとシグネチャを書く
インスタンス変数: 宣言とコメントを書く
実装の過程でコメントに問題があれば、その都度修正する
これにより、コードとコメントが同時に完成する
3つのメリット
良いコメントが書ける
システムの設計を改善できる
コメントを書くのが楽しくなる
良いコメントが書ける
設計中にコメントを書くことで、重要な設計上の問題点を記録するのが簡単になる
また、メソッドの抽象化やインタフェースに注力することができる
実装に気を取られないで済む
システムの設計を改善できる
コメントは抽象化を完全に伝える唯一の手段
Why Write Comments? The Four Exercises#6589220475d04f0000f8b0c0 radish-miyazaki.icon
コードで表現できない設計に関する情報は数多くある(unformal information)radish-miyazaki.icon
優れた 抽象化 は優れたシステム設計の基本
設計の最初にコメントを書くことで、実装コードを書く前にそのコメントを見直し、調整することで良いコメント(設計)にブラッシュアップできる radish-miyazaki.icon
良いコメント = 抽象化を上手く説明している radish-miyazaki.icon
良いコメントを書くためには、変数やコードの本質を見極める必要がある
設計の最初にこれを行うことで、その場しのぎのコードを記述しなくて済む radish-miyazaki.icon
コメントは炭鉱のカナリアのような存在
メソッドや変数に長いコメントが必要 = 抽象化がうまくできていない
レッドフラグ: Hard to Describe
抽象化 がうまくできている状態 = Deep Module radish-miyazaki.icon
強力な機能を提供しながらも、シンプルなインタフェースを持つ radish-miyazaki.icon
コメントはインタフェースがシンプルかどうかの判断材料となる
コメントが必要な情報を提供しつつ、短くてシンプル = インタフェースもシンプル
逆に、コメントが長くて複雑である = インタフェースも複雑
インタフェースのコメントと実装を比較することで、そのモジュールが深いかどうかも判断可能
インタフェースコメントが実装の主要な機能をすべて説明する必要がある = 浅い
ただし、判断できるのはコメントが明白である場合に限り、以下のようなケースは判断できない
e.g. コメントが必要な情報を提供していないケース
e.g. コメントが理解が難しいほど不可解ケース
コメントを先に書くことで、「抽象化がうまくできていない」という問題に早い段階で気づくことができる
コメントを書くのが楽しくなる
コメントは、設計時の決定を記録し、チェックするためのもの
どれだけコメントをシンプルに書くか = 設計がシンプルか
設計力の判断材料となり、モチベーションにも
「先にコメントを書くこと」のコストは低い
全コード行の半分がコメントであったとしても、コメントを書く時間は全開発時間の 5% にも満たない
コメントを書くのを後回しにしても、節約できる時間はたかが知れている
最初にコメントを書くと、コードを書き始める前に 抽象化 がより安定したものになる
Write The Comments First#658bacb575d04f00003925a7
結果として、コーディング時間の節約につながる
逆にコードを先に書くと、抽象化された部分は後から変更される可能性が高いので、より多くのコードの修正が必要となる
#読書メモ